package persistence;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import model.Equipo;
import persistence.connection.PoolConnection;

public class EquipoPersistsAdm {

	private static EquipoPersistsAdm equipoPersistsAdm;
	
	private EquipoPersistsAdm(){}
	
	public static EquipoPersistsAdm getInstance(){
		
		if (equipoPersistsAdm == null)
			equipoPersistsAdm = new EquipoPersistsAdm();
		
		return equipoPersistsAdm;
	}
	
	public ArrayList<Equipo> select(){		
		Connection con = PoolConnection.getPoolConnection().getConnection();
		String sentencia = "select * from dbLiforBasquet.dbo.Equipos";
		ArrayList<Equipo> equipos = new ArrayList<Equipo>();
		
		try {			
			PreparedStatement ps = con.prepareStatement(sentencia);
			ResultSet rs = ps.executeQuery();
			
			while (rs.next()){
				Equipo equipo = new Equipo();
				
				//faltan turnos
				equipo.setId(rs.getInt("id"));
				equipo.setNombre(rs.getString("nombre"));
				equipo.setPromedio(rs.getFloat("promedio"));
				equipo.setParticipa(rs.getBoolean("participa"));
				
				java.sql.Date fechaAlta = rs.getDate("fechaAlta");
				equipo.setFechaAlta( new java.util.Date(fechaAlta.getTime()));
				
				//jugadores;
				//preferencias;				
				
				equipos.add(equipo);
			}		
		} catch (Exception e) {		
			System.out.println("Error al obtener equipos: " + e.getMessage());
		}	
		
		PoolConnection.getPoolConnection().realeaseConnection(con);
		return equipos;
	}
	
	public ArrayList<Equipo> getEquiposByCategoria(int idCategoria){		
		Connection con = PoolConnection.getPoolConnection().getConnection();
		String sentencia = "select * from dbLiforBasquet.dbo.Equipos where idCategoria = ?";
		ArrayList<Equipo> equipos = new ArrayList<Equipo>();
		
		try {			
			PreparedStatement ps = con.prepareStatement(sentencia);
			ps.setInt(1, idCategoria);
			ResultSet rs = ps.executeQuery();
			
			while (rs.next()){
				Equipo equipo = new Equipo();			
				
				equipo.setId(rs.getInt("id"));
				equipo.setNombre(rs.getString("nombre"));
				equipo.setPromedio(rs.getFloat("promedio"));
				equipo.setParticipa(rs.getBoolean("participa"));				
				equipo.setFechaAlta( new java.util.Date(rs.getDate("fechaAlta").getTime()));
				
				//jugadores;
				//preferencias;				
				//faltan turnos
				
				equipos.add(equipo);
			}		
		} catch (Exception e) {		
			System.out.println("Error al obtener equipos por categoria: " + e.getMessage());
		}	
		
		PoolConnection.getPoolConnection().realeaseConnection(con);
		return equipos;
	}
	
	public void update(Equipo equipo, int idCategoria){		
		Connection con = PoolConnection.getPoolConnection().getConnection();
		String sentencia = "update dbLiforBasquet.dbo.Equipos " +
						   " set idCategoria = ?, nombre = ?, promedio = ?,  participa = ? " +
						   " where id = ?";
		
		try {			
			PreparedStatement ps = con.prepareStatement(sentencia);
			ps.setInt(1, idCategoria);
			ps.setString(2, equipo.getNombre());
			ps.setFloat(3, equipo.getPromedio());
			ps.setBoolean(4, equipo.getParticipa());
			ps.setInt(5, equipo.getId());			
			ps.execute();
		} catch (Exception e) {		
			System.out.println("Error al actualizar Equipo: " + e.getMessage());
		}	
		
		PoolConnection.getPoolConnection().realeaseConnection(con);
	}
}
